home *** CD-ROM | disk | FTP | other *** search
File List | 1986-10-19 | 5.7 KB | 271 lines |
- ' ********************
- ' *** ARRAYWRD.LST ***
- ' ********************
- ' *** important : element with index 0 is ignored !!
- '
- DEFWRD "a-z"
- '
- > PROCEDURE max.array(VAR proc(),high)
- ' *** return highest value of array proc()
- LOCAL last,n
- last=DIM?(proc())-1
- high=proc(1)
- FOR n=2 TO last
- high=MAX(high,proc(n))
- NEXT n
- RETURN
- ' **********
- '
- > PROCEDURE min.array(VAR proc(),low)
- ' *** return lowest value of array proc()
- LOCAL last,n
- last=DIM?(proc())-1
- low=proc(1)
- FOR n=2 TO last
- low=MIN(low,proc(n))
- NEXT n
- RETURN
- ' **********
- '
- > PROCEDURE max.elem.array(VAR proc(),index,high)
- ' *** return index and value of highest element of array proc()
- LOCAL last,n
- last=DIM?(proc())-1
- high=proc(1)
- FOR n=2 TO last
- high=MAX(high,proc(n))
- NEXT n
- index=1
- WHILE proc(index)<high
- INC index
- WEND
- RETURN
- ' **********
- '
- > PROCEDURE min.elem.array(VAR proc(),index,low)
- ' *** return index and value of lowest element of array proc()
- LOCAL last,n
- last=DIM?(proc())-1
- low=proc(1)
- FOR n=2 TO last
- low=MIN(low,proc(n))
- NEXT n
- index=1
- WHILE proc(index)>low
- INC index
- WEND
- RETURN
- ' **********
- '
- > PROCEDURE max.min.array(VAR proc(),high,low)
- ' *** return highest and lowest value of array proc()
- LOCAL last,n
- last=DIM?(proc())-1
- high=proc(1)
- low=proc(1)
- FOR n=2 TO last
- high=MAX(high,proc(n))
- low=MIN(low,proc(n))
- NEXT n
- RETURN
- ' **********
- '
- > PROCEDURE som.array(VAR proc(),som%)
- ' *** return sum of numbers in array proc()
- LOCAL last,n
- last=DIM?(proc())-1
- som%=0
- FOR n=1 TO last
- ADD som%,proc(n)
- NEXT n
- RETURN
- ' **********
- '
- > PROCEDURE middle.array(VAR proc(),middle)
- ' *** return middle value of array proc()
- LOCAL last,med,l,u,i,j,x
- last=DIM?(proc())-1
- DIM hulp.proc(last)
- FOR i=1 TO last
- hulp.proc(i)=proc(i)
- NEXT i
- med=(last+1)/2
- l=1
- u=last
- WHILE l<u
- i=1
- j=u
- x=hulp.proc(med)
- WHILE i<=med AND j>=med
- WHILE hulp.proc(i)<x
- INC i
- WEND
- WHILE hulp.proc(j)>x
- DEC j
- WEND
- SWAP hulp.proc(i),hulp.proc(j)
- INC i
- DEC j
- WEND
- IF j<med
- l=i
- ENDIF
- IF i>med
- u=j
- ENDIF
- WEND
- mediaan=hulp.proc(med)
- ERASE hulp.proc()
- RETURN
- ' **********
- '
- > PROCEDURE average.array(zero!,VAR proc(),average#,deviation#)
- ' *** return average and standard deviation of array proc()
- ' *** zero!=TRUE : use value 0 ; zero!=FALSE : ignore value 0
- LOCAL n,sum%,sum2%,i
- CLR sum%,sum2%,i
- IF zero!
- GOSUB zero.average
- ELSE
- GOSUB no.zero.average
- ENDIF
- RETURN
- ' ***
- > PROCEDURE no.zero.average
- ' *** ignore 0 in computation
- FOR n=1 TO DIM?(proc())-1
- IF proc(n)<>0
- ADD sum%,proc(n)
- ADD sum2%,proc(n)*proc(n)
- INC i
- ENDIF
- NEXT n
- average#=sum%/i
- deviation#=SQR((sum2%-sum%*sum%/i)/(i*(i-1)))
- RETURN
- ' ***
- > PROCEDURE zero.average
- ' *** use 0 in computation
- FOR n=1 TO DIM?(proc())-1
- ADD sum%,proc(n)
- ADD sum2%,proc(n)*proc(n)
- INC i
- NEXT n
- average#=sum%/i
- deviation#=SQR((sum2%-sum%*sum%/i)/(i*(i-1)))
- RETURN
- ' **********
- '
- > PROCEDURE freq.array(elem,VAR proc(),freq)
- ' *** return frequency of value elem in array proc()
- LOCAL last,n
- last=DIM?(proc())-1
- freq=0
- FOR n=1 TO last
- IF proc(n)=elem
- INC freq
- ENDIF
- NEXT n
- RETURN
- ' **********
- '
- > PROCEDURE freq.limit.array(limit,VAR proc(),freq)
- ' *** return frequency of all numbers >= limit in array proc()
- LOCAL last,n
- last=DIM?(proc())-1
- freq=0
- FOR n=1 TO last
- IF proc(n)>=limit
- INC freq
- ENDIF
- NEXT n
- RETURN
- ' **********
- '
- > PROCEDURE all.freq.array(VAR proc(),freq())
- ' *** return frequency of all integers in array proc()
- ' *** only integers >= 0 allowed in array proc()
- ' *** frequency-array must already exist !
- ' *** integers must vary from 0 to last index of frequency-array !
- LOCAL last,max,i,j
- last=DIM?(proc())-1
- max=DIM?(freq())-1
- FOR i=0 TO max
- FOR j=1 TO last
- IF proc(j)=i
- INC freq(i)
- ENDIF
- NEXT j
- NEXT i
- RETURN
- ' **********
- '
- > PROCEDURE step.freq.array(step,VAR proc(),freq())
- ' *** return frequency of all integers in array proc()
- ' *** array proc() contains multiples of step only !
- ' *** example with step=5 : 0,5,15,20,25,....95,100
- ' *** remember, freq(3) contains frequency of value 3*step !
- LOCAL last,max,i,j
- last=DIM?(proc())-1
- max=(DIM?(freq())-1)*step
- FOR i=0 TO max STEP step
- FOR j=1 TO last
- IF proc(j)=i
- INC freq(DIV(i,step))
- ENDIF
- NEXT j
- NEXT i
- RETURN
- ' **********
- '
- > PROCEDURE shuffle.array(VAR proc())
- ' *** shuffle integers in array proc()
- LOCAL n,j
- FOR n=DIM?(proc())-1 DOWNTO 2
- j=RAND(n)+1 ! random number (1 - n)
- SWAP proc(j),proc(n)
- NEXT n
- RETURN
- ' **********
- '
- > PROCEDURE compress.array(VAR proc())
- ' *** remove duplicates from sorted array proc()
- ' *** dimension of array will be changed after deletions !
- LOCAL last,i,j
- last=DIM?(proc())-1
- i=2
- WHILE proc(i-1)<>proc(i) AND i<last
- INC i
- WEND
- IF proc(i-1)<>proc(i)
- INC i
- ENDIF
- j=i-1
- WHILE i<last
- INC i
- IF proc(i-1)<>proc(i)
- INC j
- proc(j)=proc(i)
- ENDIF
- WEND
- DIM new.proc(j)
- FOR i=1 TO j
- new.proc(i)=proc(i)
- NEXT i
- SWAP proc(),new.proc()
- ERASE new.proc()
- RETURN
- ' **********
- '
- > PROCEDURE reverse.array(VAR proc())
- ' *** reverse array proc()
- LOCAL last,half,n
- last=DIM?(proc())-1
- half=last/2
- FOR n=1 TO half
- SWAP proc(n),proc(last+1-n)
- NEXT n
- RETURN
- ' **********
- '
-